<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status，这个用于设置log4j2自身内部的信息输出，可以不设置，
    当设置成trace时，你会看到log4j2内部各种详细输出-->
<!--monitorInterval：Log4j能够自动检测修改配置 文件和重新配置本身，设置间隔秒数-->
<configuration status="all">
	<Properties>
		<Property name="log-path">logs</Property>
	</Properties>

	<!--先定义所有的appender-->
	<appenders>
		<!--这个输出控制台的配置-->
		<console name="Console" target="SYSTEM_OUT">
			<ThresholdFilter level="all"/>
			<!--输出日志的格式-->
			<!--             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>   -->
			<PatternLayout pattern="%d %-5p method: [%t] %C{2} (%F:%L) - %m%n"/>
		</console>

		<!-- 这个会打印出所有的info及以下级别的信息，每次大小超过size，
        则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩，作为存档-->
		<RollingFile name="RollingFileInfo" fileName="${"$"}{log-path}/logs/info.log"
					 filePattern="${"$"}{log-path}/logs/${"$"}{date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<!--控制台只输出level及以上级别的信息（onMatch），其他的直接拒绝（onMismatch）-->
				<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
				<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
			</Filters>
			<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="100 MB"/>
			</Policies>
		</RollingFile>

		<RollingFile name="RollingFileWarn" fileName="${"$"}{log-path}/logs/warn.log"
					 filePattern="${"$"}{log-path}/logs/${"$"}{date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
				<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
			</Filters>
			<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="100 MB"/>
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置，则默认为最多同一文件夹下7个文件，这里设置了20 -->
			<DefaultRolloverStrategy max="20"/>
		</RollingFile>

		<RollingFile name="RollingFileError" fileName="${"$"}{log-path}/logs/error.log"
					 filePattern="${"$"}{log-path}/logs/${"$"}{date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">

			<Filters>
				<!--控制台只输出level及以上级别的信息（onMatch），其他的直接拒绝（onMismatch）-->
				<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
				<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
				<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
			</Filters>


			<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy size="100 MB"/>
			</Policies>
		</RollingFile>

	</appenders>
	<!--然后定义logger，只有定义了logger并引入的appender，appender才会生效-->
	<loggers>
		<!--过滤掉spring和hibernate的一些无用的debug信息-->
		<logger name="org.springframework" level="debug">
		</logger>
		<logger name="org.mybatis" level="debug">
		</logger>
		<root level="all">
			<appender-ref ref="Console"/>
			<appender-ref ref="RollingFileInfo"/>
			<appender-ref ref="RollingFileWarn"/>
			<appender-ref ref="RollingFileError"/>
		</root>
	</loggers>

</configuration>